import types from '../../mutation-types'
import NotificationsAPI from '../../../api/notifications'

export const actions = {
  get: async ({ commit }, { page = 1 } = {}) => {
    commit(types.SET_NOTIFICATIONS_UI_FLAG, { isFetching: true })
    try {
      const {
        data: { payload, meta },
      } = await NotificationsAPI.get(page)

      commit(types.CLEAR_NOTIFICATIONS)
      commit(types.SET_NOTIFICATIONS, payload)
      commit(types.SET_NOTIFICATIONS_META, meta)
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isFetching: false })
    } catch (error) {
      console.log(error)
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isFetching: false })
    }
  },
  unReadCount: async ({ commit } = {}) => {
    commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdatingUnreadCount: true })
    try {
      const { data } = await NotificationsAPI.getUnreadCount()
      commit(types.SET_NOTIFICATIONS_UNREAD_COUNT, data)
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdatingUnreadCount: false })
    } catch (error) {
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdatingUnreadCount: false })
    }
  },
  read: async (
    { commit },
    { primaryActorType, primaryActorId, unreadCount }
  ) => {
    try {
      await NotificationsAPI.read(primaryActorType, primaryActorId)
      commit(types.SET_NOTIFICATIONS_UNREAD_COUNT, unreadCount - 1)
      commit(types.UPDATE_NOTIFICATION, primaryActorId)
    } catch (error) {
      throw new Error(error)
    }
  },
  readAll: async ({ commit }) => {
    commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdating: true })
    try {
      await NotificationsAPI.readAll()
      commit(types.SET_NOTIFICATIONS_UNREAD_COUNT, 0)
      commit(types.UPDATE_ALL_NOTIFICATIONS)
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdating: false })
    } catch (error) {
      commit(types.SET_NOTIFICATIONS_UI_FLAG, { isUpdating: false })
      throw new Error(error)
    }
  },

  addNotification ({ commit }, data) {
    commit(types.ADD_NOTIFICATION, data)
  },
}
